// TODO 25/6/04
// 运算符
// 1.算术运算符
package main

import "fmt"

func main2() {
	// 算术运算符 + - * / % ++ --
	var a int = 7
	var b int = 3
	var c int // 结果
	// 双元运算符，由两个变量参与运算，或者多个
	c = a + b
	fmt.Println(c)
	c = a - b
	fmt.Println(c)
	c = a * b
	fmt.Println(c)

	c = a / b // 除 7/3 = 2...1
	fmt.Println(c)
	c = a % b // 取模 余数  1
	fmt.Println(c)

	// 单元运算符，用自己就可以操作得出结果
	//  自增++  自减--
	fmt.Println(a)
	a++ // a = a + 1 自增，在自己的基础上 + 1
	fmt.Println(a)

	a = 7
	a-- // a = a-1。  遍历输出一些东西（10000个数字）
	fmt.Println(a)

}

//2.关系运算符（必须记住）
/*
大于 >
小于 <
等于 ==
不等于 !=
大于等于 > =
小于等于 < =
结果：布尔值 （对或者错）
*/
func main3() {

	var a int = 21
	var b int = 10
	// 关系运算符、和 算术运算符，都是小学4年级学的，必须要掌握
	fmt.Println(a > b)
	fmt.Println(a >= b)
	fmt.Println(a < b)
	fmt.Println(a <= b)
	fmt.Println(a == b)
	fmt.Println(a != b)

}

//3.逻辑运算符(难点)
//判断多个条件是否存在的时候，就需要逻辑
/*
&& 与 只要有一个错，大家都是错的 false，两个都对才是对的。 多条件同时满足（与）
与（和） And 对 And 错 对 And 对（true） 错 And 对 错和错 共生！
|| 或 只要有一个对的，那么就是对的，两个都是错的，结果才是错的。（or）
或 Or 或者 对 or 错 （true） 对 or对（true） 错 or对 （true） 错or错 （错）
！ 如果是真的，那么为假，如果是假，则为真。
非（取反）
*/

// 逻辑运算符，结果也是布尔值。 多个条件判断是否成立作用
func main() {
	var a bool = true
	var b bool = false
	var c bool = true
	var d bool = false

	// 双元运算符  &&   ||

	// 与 都为真结果才为真，如果有假则结果为假
	// 账户名 和 密码 都要正确才可以登录
	fmt.Println(a && b)
	fmt.Println(a && c)
	fmt.Println(a && d)
	// 短路判断, 在这里 4<5 是没有运算的，也不要运算，因为在 3<2 结果已经出现了
	fmt.Println(1 == 1 && 3 < 2 && 4 < 5)
	fmt.Println("=============================")
	// 或 || 只要满足一个条件，整体结果就位 true  or
	// 如果所有条件都不满足，结果为false。
	// 看文章 （登录、缓存、能够访问......）
	fmt.Println(a || b) // true  false
	fmt.Println(a || c) // true  true
	fmt.Println(a || d) // true  false
	fmt.Println(b || d) // false  false

	// 单元运算符  一个条件就够，就是将当前结果的bool置反
	// 如果真，则结果是假，如果假，则结果是真，
	// 取反
	fmt.Println(!(b || d))
	fmt.Println(!true)
	fmt.Println(!!false)

}
